# -*- coding: utf-8 -*-
"""

    pyQt5 中QTableView表格视图控件

"""
import json

from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QAbstractItemView, QHeaderView


class LimitedModel(QStandardItemModel):
    def __init__(self, parent=None, max_item=None):
        super(LimitedModel, self).__init__(parent)
        self.max_items = max_item

    def appendRow(self, item):
        if self.rowCount() >= self.max_items:
            self.removeRow(0)
        super(LimitedModel, self).appendRow(item)


def show_table(table_View, data_str, model, header_list):
    if model is None:
        model = LimitedModel(max_item=50)
        model.setHorizontalHeaderLabels(header_list)
    if data_str is not None and len(data_str) != 0:
        data = json.loads(data_str)  # 输出dict类型
        item_list = []
        for index, cell in enumerate(data):
            item = QStandardItem(str(data.get(cell)))
            item.setToolTip(str(data.get(cell)))  # 显示工具提示（tooltips）
            item_list.append(item)
        model.appendRow(item_list)
    table_View.setModel(model)
    # 右侧下划卷 定位展示到该行数 (达到定位最新行的效果)
    table_View.scrollTo(table_View.model().index(model.rowCount() - 1, 0))
    table_View.setWordWrap(True)  # 行文字可以自动换行
    table_View._show_on_hover = True  # 是否在鼠标悬停时显示内容。默认是False。
    table_View.horizontalHeader().setHighlightSections(True)  # 高亮表头
    table_View.horizontalHeader().setStretchLastSection(True)  # 铺满整个 tableView
    table_View.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)  # ResizeToContents 按照内容大小平均分割
    # tableView.verticalHeader().hide()                                  # 隐藏行号
    table_View.setEditTriggers(QAbstractItemView.NoEditTriggers)  # # QTableView，不可编辑
    # tableView.setColumnWidth(4, 400)                                        # 设置列宽
    # tableView.setColumnWidth(5, 400)                                        # 设置列宽
    # tableView.setRowHeight(index, 50)                                       # 设置行高
    for i in range(model.rowCount()):
        table_View.setRowHeight(i, 40)  # 设置行高
    return model


def show_market_table(table_View, data_str, model, header_list):
    if model is None:
        model = LimitedModel(max_item=50)
        model.setHorizontalHeaderLabels(header_list)
    if data_str is not None and len(data_str) != 0:
        data = json.loads(data_str)  # 输出dict类型
        item_list = []
        for index, cell in enumerate(data):
            item = QStandardItem(str(data.get(cell)))
            item.setToolTip(str(data.get(cell)))  # 显示工具提示（tooltips）
            item_list.append(item)
        model.appendRow(item_list)


        # 遍历 QStandardItemModel 中的所有数据
        column = {}
        for i in range(model.rowCount()):
            rows = []
            for j in range(model.columnCount()):
                item = model.item(i, j)
                rows.append(item.text())
            column[model.item(i, 1).text()] = rows
        model.clear()
        model = LimitedModel(max_item=50)
        model.setHorizontalHeaderLabels(header_list)
        # 遍历 dict
        for key, value in column.items():
            list_q = []
            for v in value:
                new_item = QStandardItem(v)
                list_q.append(new_item)
            model.appendRow(list_q)

    table_View.setModel(model)
    # 右侧下划卷 定位展示到该行数 (达到定位最新行的效果)
    table_View.scrollTo(table_View.model().index(model.rowCount() - 1, 0))
    table_View.setWordWrap(True)  # 行文字可以自动换行
    table_View._show_on_hover = True  # 是否在鼠标悬停时显示内容。默认是False。
    table_View.horizontalHeader().setHighlightSections(True)  # 高亮表头
    table_View.horizontalHeader().setStretchLastSection(True)  # 铺满整个 tableView
    table_View.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)  # ResizeToContents 按照内容大小平均分割
    # tableView.verticalHeader().hide()                                  # 隐藏行号
    table_View.setEditTriggers(QAbstractItemView.NoEditTriggers)  # # QTableView，不可编辑
    # tableView.setColumnWidth(4, 400)                                        # 设置列宽
    # tableView.setColumnWidth(5, 400)                                        # 设置列宽
    # tableView.setRowHeight(index, 50)                                       # 设置行高
    for i in range(model.rowCount()):
        table_View.setRowHeight(i, 40)  # 设置行高
    return model
